Spring Security 是 Spring 生态中用于处理身份验证（Authentication）和授权（Authorization）的强大框架。以下是一个简单的 Spring Security 代码示例，展示了如何配置基本的身份验证和授权功能。

---

### **1. 环境准备**
确保你已经添加了 Spring Security 的依赖。例如，使用 Maven 时，`pom.xml` 中需要添加以下依赖：

```xml
<dependencies>
    <!-- Spring Security 依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <!-- Spring Web 依赖 -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
</dependencies>
```

---

### **2. Spring Security 配置**
以下代码展示了如何配置 Spring Security，实现基于内存的用户身份验证和简单的 URL 授权。

#### **2.1 创建 Spring Boot 应用**
```java
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SpringSecurityApplication {
    public static void main(String[] args) {
        SpringApplication.run(SpringSecurityApplication.class, args);
    }
}
```

#### **2.2 配置 Spring Security**
```java
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                .requestMatchers("/public").permitAll() // 允许所有人访问 /public
                .requestMatchers("/admin").hasRole("ADMIN") // 只有 ADMIN 角色可以访问 /admin
                .anyRequest().authenticated() // 其他请求需要身份验证
            )
            .formLogin(form -> form
                .loginPage("/login") // 自定义登录页面
                .permitAll()
            )
            .logout(logout -> logout
                .permitAll()
            );
        return http.build();
    }

    @Bean
    public UserDetailsService userDetailsService() {
        UserDetails user = User.builder()
            .username("user")
            .password(passwordEncoder().encode("password"))
            .roles("USER")
            .build();

        UserDetails admin = User.builder()
            .username("admin")
            .password(passwordEncoder().encode("admin"))
            .roles("ADMIN")
            .build();

        return new InMemoryUserDetailsManager(user, admin);
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}
```

---

### **3. 控制器代码**
以下代码展示了如何定义控制器来处理不同的请求。

```java
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HomeController {

    @GetMapping("/")
    public String home() {
        return "Welcome to the Home Page!";
    }

    @GetMapping("/public")
    public String publicPage() {
        return "This is a Public Page!";
    }

    @GetMapping("/admin")
    public String adminPage() {
        return "This is an Admin Page!";
    }

    @GetMapping("/user")
    public String userPage() {
        return "This is a User Page!";
    }
}
```

---

### **4. 运行步骤**
1. **启动应用**  
   运行 `SpringSecurityApplication` 类，启动 Spring Boot 应用。

2. **访问端点**  
   - `/public`：无需登录即可访问。
   - `/`、`/user`、`/admin`：需要登录后才能访问。
   - `/admin`：只有 `ADMIN` 角色的用户才能访问。

3. **登录**  
   默认情况下，Spring Security 会自动生成一个登录页面。使用以下凭据登录：
   - 用户：`user`，密码：`password`（`USER` 角色）。
   - 用户：`admin`，密码：`admin`（`ADMIN` 角色）。

---

### **5. 输出结果**
- 访问 `/public`：
  ```
  This is a Public Page!
  ```
- 访问 `/` 或 `/user`（登录后）：
  ```
  Welcome to the Home Page!
  This is a User Page!
  ```
- 访问 `/admin`（以 `ADMIN` 角色登录后）：
  ```
  This is an Admin Page!
  ```

---

### **6. 总结**
以上代码展示了如何使用 Spring Security 实现基本的身份验证和授权功能。你可以根据需要扩展代码，例如：
- 使用数据库存储用户信息。
- 实现 OAuth2 或 JWT 认证。
- 自定义登录页面和错误处理。

Spring Security 提供了强大的功能，适用于各种安全需求。